home *** CD-ROM | disk | FTP | other *** search
/ Aminet 48 / Aminet 48 (2002)(GTI - Schatztruhe)[!][Apr 2002].iso / Aminet / text / edit / vim60rt.lha / Vim / vim60 / doc / usr_30.txt < prev    next >
Encoding:
Text File  |  2001-09-26  |  22.1 KB  |  643 lines

  1. *usr_30.txt*    For Vim version 6.0.  Last change: 2001 Sep 03
  2.  
  3.              VIM USER MANUAL - by Bram Moolenaar
  4.  
  5.                   Editing programs
  6.  
  7.  
  8. Vim has various commands that aid in writing computer programs.  Compile a
  9. program and directly jump to reported errors.  Automatically set the indent
  10. for many languages and format comments.
  11.  
  12. |30.1|    Compiling
  13. |30.2|    Indenting C files
  14. |30.3|    Automatic indenting
  15. |30.4|    Other indenting
  16. |30.5|    Tabs and spaces
  17. |30.6|    Formatting comments
  18.  
  19.      Next chapter: |usr_31.txt|  Exploiting the GUI
  20.  Previous chapter: |usr_29.txt|  Moving through programs
  21. Table of contents: |usr_toc.txt|
  22.  
  23. ==============================================================================
  24. *30.1*    Compiling
  25.  
  26. Vim has a set of so called "quickfix" commands.  They enable you to compile a
  27. program from within Vim and then go through the errors generated and fix them
  28. (hopefully).  You can then recompile and fix any new errors that are found
  29. until finally your program compiles without any error.
  30.  
  31. The following command runs the program "make" (supplying it with any argument
  32. you give) and captures the results: >
  33.  
  34.     :make {arguments}
  35.  
  36. If errors were generated, they are captured and the editor positions you where
  37. the first error occurred.
  38.    Take a look at an example ":make" session. (Typical :make sessions generate
  39. far more errors and fewer stupid ones.)  After typing ":make" the screen looks
  40. like this:
  41.  
  42.     :!make | &tee /tmp/vim215953.err ~
  43.     gcc -g -Wall -o prog main.c sub.c ~
  44.     main.c: In function 'main': ~
  45.     main.c:6: too many arguments to function 'do_sub' ~
  46.     main.c: At top level: ~
  47.     main.c:10: parse error before '}' ~
  48.     make: *** [prog] Error 1 ~
  49.  
  50.     2 returned ~
  51.     "main.c" 11L, 111C ~
  52.     (3 of 6): too many arguments to function 'do_sub' ~
  53.     Hit ENTER or type command to continue ~
  54.  
  55. From this you can see that you have errors in the file "main.c".  When you
  56. press Enter, Vim displays the file "main.c", with the cursor positioned on
  57. line 6, the first line with an error.  You did not need to specify the file or
  58. the line number, Vim knew where to go by looking in the error messages.
  59.  
  60.         +---------------------------------------------------+
  61.         |int main()                        |
  62.         |{                            |
  63.         |    int i=3;                    |
  64.       cursor -> |    do_sub("foo");                    |
  65.         |    ++i;                        |
  66.         |    return (0);                    |
  67.         |}                            |
  68.         |}                            |
  69.         | ~                            |
  70.         |(3 of 12): too many arguments to function 'do_sub' |
  71.         +---------------------------------------------------+
  72.  
  73. The following command goes to where the next error occurs: >
  74.  
  75.     :cnext
  76.  
  77. Vim jumps to line 10, the last line in the file, where there is an extra '}'.
  78.    When there is not enough room, Vim will shorten the error message.  To see
  79. the whole message use: >
  80.  
  81.     :cc
  82.  
  83. You can get an overview of all the error messages with the ":clist" command.
  84. The output looks like this: >
  85.  
  86.     :clist
  87. <    3 main.c: 6:too many arguments to function 'do_sub' ~
  88.     5 main.c: 10:parse error before '}' ~
  89.  
  90. Only the lines where Vim recognized a file name and line number are listed
  91. here.  It assumes those are the interesting lines and the rest is just boring
  92. messages.  However, sometimes unrecognized lines do contain something you want
  93. to see.  Output from the linker, for example, about an undefined function.
  94. To see all the messages add a "!" to the command: >
  95.  
  96.     :clist!
  97. <    1 gcc -g -Wall -o prog main.c sub.c ~
  98.     2 main.c: In function 'main': ~
  99.     3 main.c:6: too many arguments to function 'do_sub' ~
  100.     4 main.c: At top level: ~
  101.     5 main.c:10: parse error before '}' ~
  102.     6 make: *** [prog] Error 1 ~
  103.  
  104. Vim will highlight the current error.  To go back to the previous error, use:
  105. >
  106.     :cprevious
  107.  
  108. Other commands to move around in the error list:
  109.  
  110.     :cfirst        to first error
  111.     :clast        to last error
  112.     :cc 3        to error nr 3
  113.  
  114.  
  115. USING ANOTHER COMPILER
  116.  
  117. The name of the program to run when the ":make" command is executed is defined
  118. by the 'makeprg' option.  Usually this is set to "make", but Visual C++ users
  119. should set this to "nmake" by executing the following command: >
  120.  
  121.     :set makeprg=nmake
  122.  
  123. You can also include arguments in this option.  Special characters need to
  124. be escaped with a backslash.  Example: >
  125.  
  126.     :set makeprg=nmake\ -f\ project.mak
  127.  
  128. You can include special Vim keywords in the command specification.  The %
  129. character expands to the name of the current file.  So if you execute the
  130. command: >
  131.     :set makeprg=make\ %
  132.  
  133. When you are editing main,c, then ":make" executes the following command: >
  134.  
  135.     make main.c
  136.  
  137. This is not too useful, so you will refine the command a little and use the :r
  138. (root) modifier: >
  139.  
  140.     :set makeprg=make\ %:r.o
  141.  
  142. Now the command executed is as follows: >
  143.  
  144.     make file.o
  145.  
  146. More about these modifiers here: |filename-modifiers|.
  147.  
  148.  
  149. OLD ERROR LISTS
  150.  
  151. Suppose you ":make" a program.  There is an warning message in one file and an
  152. error message in another.  You fix the error and use ":make" again to check if
  153. it was really fixed.  Now you want to look at the warning message.  It doesn't
  154. show up in the last error list, since the file with the warning wasn't
  155. compiled again.  You can go back to the previous error list with: >
  156.  
  157.     :colder
  158.  
  159. Then use ":clist" and "cc {nr}" to jump to the place with the warning.
  160.    To go forward to the next error list: >
  161.  
  162.     :cnewer
  163.  
  164. Vim remembers ten error lists.
  165.  
  166.  
  167. SWITCHING COMPILERS
  168.  
  169. You have to tell Vim what format the error messages are that your compiler
  170. produces.  This is done with the 'errorformat' option.  The syntax of this
  171. option is quite complicated and it can be made to fit almost any compiler.
  172. You can find the explanation here: |errorformat|.
  173.  
  174. You might be using various different compilers.  Setting the 'makeprg' option,
  175. and especially the 'errorformat' each time is not easy.  Vim offers a simple
  176. method for this.  For example, to switch to using the Microsoft Visual C++
  177. compiler: >
  178.  
  179.     :compiler msvc
  180.  
  181. This will find the Vim script for the "msvc" compiler and set the appropriate
  182. options.
  183.    You can write your own compiler files.  See |write-compiler-plugin|.
  184.  
  185.  
  186. OUTPUT REDIRECTION
  187.  
  188. The ":make" command redirects the output of the executed program to an error
  189. file.  How this works depends on various things, such as the 'shell'.  If your
  190. ":make" command doesn't capture the output, check the 'makeef' and
  191. 'shellredir' options.  The 'shellquote' and 'shellxquote' options might also
  192. matter.
  193.  
  194. In case you can't get ":make" to redirect the file for you, an alternative is
  195. to compile the program in another window and redirect the output into a file.
  196. Then have Vim read this file with: >
  197.  
  198.     :cfile {filename}
  199.  
  200. Jumping to errors will work like with the ":make" command.
  201.  
  202. ==============================================================================
  203. *30.2*    Indenting C files
  204.  
  205. A program is much easier to understand when the lines have been properly
  206. indented.  Vim offers various ways to make this less work.
  207.    For C programs set the 'cindent' option.  Vim knows a lot about C programs
  208. and will try very hard to automatically set the indent for you.  Set the
  209. 'shiftwidth' option to the amount of spaces you want for a deeper level.  Four
  210. spaces will work fine.  One ":set" command will do it: >
  211.  
  212.     :set cindent shiftwidth=4
  213.  
  214. With this option enabled, when you type something such as "if (x)", the next
  215. line will automatically be indented an additional level.
  216.  
  217.                     if (flag)
  218.     Automatic indent   --->        do_the_work();
  219.     Automatic unindent <--        if (other_flag) {
  220.     Automatic indent   --->        do_file();
  221.     keep indent            do_some_more();
  222.     Automatic unindent <--        }
  223.  
  224. When you type something in curly braces ({}), the text will be indented at the
  225. start and unindented at the end.  The unindenting will happen after typing the
  226. '}', since Vim can't guess what you are going to type.
  227.  
  228. One side effect of automatic indentation is that it helps you catch errors in
  229. your code early.  When you type a } to finish a function, only to find that
  230. the automatic indentation gives it more indent than what you expected, there
  231. is probably a } missing.  Use the "%" command to find out which { matches the
  232. } you typed.
  233.    A missing ) and ; also cause extra indent.  Thus if you get more white
  234. space than you would expect, check the preceding lines.
  235.  
  236. When you have code that is badly formatted, or you inserted and deleted lines,
  237. you need to re-indent the lines.  The "=" operator does this.  The simplest
  238. form is: >
  239.  
  240.     ==
  241.  
  242. This indents the current line.  Like with all operators, there are three ways
  243. to use it.  In Visual mode "=" indents the selected lines.  A useful text
  244. object is "a{"  This selects the current {} block.  Thus, to re-indent the
  245. code code block the cursor is in: >
  246.  
  247.     =a{
  248.  
  249. I you have really badly indented code, you can re-indent the whole file with:
  250. >
  251.     gg=G
  252.  
  253. However, don't do this in files that have been carefully indented manually.
  254. The automatic indenting does a good job, but in some situations you might want
  255. to overrule it.
  256.  
  257.  
  258. SETTING INDENT STYLE
  259.  
  260. Different people have different styles of indentation.  By default Vim does a
  261. pretty good job of indenting in a way that 90% of programmers do.  There are
  262. different styles, however; so if you want to, you can customize the
  263. indentation style with the 'cinoptions' option.
  264.    By default 'cinoptions' is empty and Vim uses the default style.  You can
  265. add various items where you want something different.  For example, to make
  266. curly braces be placed like this:
  267.  
  268.     if (flag) ~
  269.       { ~
  270.         i = 8; ~
  271.         j = 0; ~
  272.       } ~
  273.  
  274. Use this command: >
  275.  
  276.     :set cinoptions+={2
  277.  
  278. There are many of these items.  See |cinoptions-values|.
  279.  
  280. ==============================================================================
  281. *30.3*    Automatic indenting
  282.  
  283. You don't want to switch on the 'cindent' option manually every time you edit
  284. a C file.  This is how you make it work automatically: >
  285.  
  286.     :filetype indent on
  287.  
  288. Actually, this does a lot more than switching on 'cindent' for C files.  First
  289. of all, it enables detecting the type of a file.  That's the same as what is
  290. used for syntax highlighting.
  291.    When the filetype is known, Vim will search for an indent file for this
  292. type of file.  The Vim distribution includes a number of these for various
  293. programming languages.  This indent file will then prepare for automatic
  294. indenting specifically for this file.
  295.  
  296. If you don't like the automatic indenting, you can switch it off again: >
  297.  
  298.     :filetype indent off
  299.  
  300. If you don't like the indenting for one specific type of file, this is how you
  301. avoid it.  Create a file with just this one line: >
  302.  
  303.     :let b:did_indent = 1
  304.  
  305. Now you need to write this in a file with a specific name:
  306.  
  307.     {directory}/indent/{filetype}.vim
  308.  
  309. The {filetype} is the name of the file type, such as "cpp" or "java".  You can
  310. see the exact name that Vim detected with this command: >
  311.  
  312.     :set filetype
  313.  
  314. In this file the output is:
  315.  
  316.     filetype=help ~
  317.  
  318. This you would use "help" for {filetype}.
  319.    For the {directory} part you need to use your runtime directory.  Look at
  320. the output of this command: >
  321.  
  322.     set runtimepath
  323.  
  324. Now use the first item, the name before the first comma.  Thus if the output
  325. looks like this:
  326.  
  327.     runtimepath=~/.vim,/usr/local/share/vim/vim60/runtime,~/.vim/after ~
  328.  
  329. You use "~/.vim" for {directory}.  Then the resulting file name is:
  330.  
  331.     ~/.vim/indent/help.vim ~
  332.  
  333. Instead of switching the indenting off, you could write your own indent file.
  334. How to do that is explained here: |indent-expression|.
  335.  
  336. ==============================================================================
  337. *30.4*    Other indenting
  338.  
  339. The most simple form of automatic indenting is with the 'autoindent' option.
  340. It uses the indent from the previous line.  A bit smarter is the 'smartindent'
  341. option.  This is useful for languages where no indent file is available.
  342. 'smartindent'is not as smart as 'cindent', but smarter than 'autoindent'.
  343.    With 'smartindent' set, an extra level of indentation is added for each {
  344. and removed for each }.  An extra level of indentation will also be added for
  345. any of the words in the 'cinwords' option.  Lines that begin with # are
  346. treated specially: all indentation is removed.  This is done so that
  347. preprocessor directives will all start in column 1.  The indentation is
  348. restored for the next line.
  349.  
  350.  
  351. CORRECTING INDENTS
  352.  
  353. When you are using 'autoindent' or 'smartindent' to get the indent of the
  354. previous line, there will be many times when you need to add or remove one
  355. 'shiftwidth' worth of indent.  A quick way to do this is using the CTRL-D and
  356. CTRL-T commands in Insert mode.
  357.    For example, you are typing a shell script that is supposed to look like
  358. this:
  359.  
  360.     if test -n a; then ~
  361.        echo a ~
  362.        echo "-------" ~
  363.     fi ~
  364.  
  365. Start off by setting these option: >
  366.  
  367.     :set autoindent shiftwidth=3
  368.  
  369. You start by typing the first line, <Enter> and the start of the second line:
  370.  
  371.     if test -n a; then ~
  372.     echo ~
  373.  
  374. Now you see that you need an extra indent.  Type CTRL-T.  The result:
  375.  
  376.     if test -n a; then ~
  377.        echo ~
  378.  
  379. The CTRL-T command, in Insert mode, adds one 'shiftwidth' to the indent, no
  380. matter where in the line you are.
  381.    You continue typing the second line, <Enter> and the third line.  This time
  382. the indent is OK.  Then <Enter> and the last line.  Now you have this:
  383.  
  384.     if test -n a; then ~
  385.        echo a ~
  386.        echo "-------" ~
  387.        fi ~
  388.  
  389. To remove the superfluous indent in the last line press CTRL-D.  This deletes
  390. one 'shiftwidth' worth of indent, no matter where you are in the line.
  391.    When you are in Normal mode, you can use the ">>" and "<<" commands to
  392. shift lines.  ">" and "<" are operators, thus you have the usual three ways to
  393. specify the lines you want to indent.  A useful combination is: >
  394.  
  395.     >i{
  396.  
  397. This adds one indent to the current block of lines, inside {}.  The { and }
  398. lines themselves are left unmodified.  ">a{" includes them.  In this example
  399. the cursor is on "printf":
  400.  
  401.     original text        after ">i{"        after ">a{"
  402.  
  403.     if (flag)        if (flag)        if (flag) ~
  404.     {            {                { ~
  405.     printf("yes");            printf("yes");        printf("yes"); ~
  406.     flag = 0;            flag = 0;            flag = 0;  ~
  407.     }            }                } ~
  408.  
  409. ==============================================================================
  410. *30.5*    Tabs and spaces
  411.  
  412. 'tabstop' is set to eight by default.  Although you can change it, you quickly
  413. run into trouble later.  Other programs won't know what tabstop value you
  414. used.  They probably use the default value of eight, and your text suddenly
  415. looks very different.  Also, most printers use a fixed tabstop value of eight.
  416. Thus it's best to keep 'tabstop' alone.  (If you edit a file which was written
  417. with a different tabstop setting, see |25.3| for how to fix that.)
  418.    For indenting lines in a program, using a multiple of eight spaces makes
  419. you quickly run into the right border of the window.  Using a single space
  420. doesn't provide enough visual difference.  Many people prefer to use four
  421. spaces, a good compromise.
  422.    Since a <Tab> is eight spaces and you want to use an indent of four spaces,
  423. you can't use a <Tab> character to make your indent.  There are two ways to
  424. handle this:
  425.  
  426. 1.  Use a mix of <Tab> and space characters.  Since a <Tab> takes the place of
  427.     eight spaces, you have fewer characters in your file.  Inserting a <Tab>
  428.     is quicker than eight spaces.  Backspacing works faster as well.
  429.  
  430. 2.  Use spaces only.  This avoids the trouble with programs that use a
  431.     different tabstop value.
  432.  
  433. Fortunately, Vim supports both methods quite well.
  434.  
  435.  
  436. SPACES AND TABS
  437.  
  438. If you are using a combination of tabs and spaces, you just edit normally.
  439. The Vim defaults do a fine job of handling things.
  440.    You can make life a little easier by setting the 'softtabstop' option.
  441. This option tells Vim to make the Tab key look and feel as if tabs were set at
  442. the value of 'softtabstop', but actually use a combination of tabs and spaces.
  443.    After you execute the following command, every time you press the Tab key
  444. the cursor moves to the next 4-column boundary: >
  445.  
  446.     :set softtabstop=4
  447.  
  448. When you start in the first column and press <Tab>, you get 4 spaces inserted
  449. in your text.  The second time, Vim takes out the 4 spaces and puts in a <Tab>
  450. (thus taking you to column 8).  Thus Vim uses as many <Tab>s as possible, and
  451. then fills up with spaces.
  452.    When backspacing it works the other way around.  A <BS> will always delete
  453. the amount specified with 'softtabstop'.  Then <Tabs> are used as many as
  454. possible and spaces to fill the gap.
  455.    The following shows what happens pressing <Tab> a few times, and then using
  456. <BS>.  A "." stands for a space and "------->" for a <Tab>.
  457.  
  458.     type              result ~
  459.     <Tab>              ....
  460.     <Tab><Tab>          ------->
  461.     <Tab><Tab><Tab>          ------->....
  462.     <Tab><Tab><Tab><BS>      ------->
  463.     <Tab><Tab><Tab><BS><BS>   ....
  464.  
  465. An alternative is to use the 'smarttab' option.  When it's set, Vim uses
  466. 'shiftwidth' for a <Tab> typed in the indent of a line, and a real <Tab> when
  467. typed after the first non-blank character.  However, <BS> doesn't work like
  468. with 'softtabstop'.
  469.  
  470.  
  471. JUST SPACES
  472.  
  473. If you want absolutely no tabs in your file, you can set the 'expandtab'
  474. option: >
  475.  
  476.     :set expandtab
  477.  
  478. When this option is set, the <Tab> key inserts a series of spaces.  Thus you
  479. get the same amount of white space as if a <Tab> character was inserted, but
  480. there isn't a real <Tab> character in your file.
  481.    The backspace key will delete each space by itself.  Thus after typing one
  482. <Tab> you have to press the <BS> key up to eight times to undo it.  If you are
  483. in the indent, pressing CTRL-D will be a lot quicker.
  484.  
  485.  
  486. CHANGING TABS IN SPACES (AND BACK)
  487.  
  488. Setting 'expandtab' does not affect any existing tabs.  In other words, any
  489. tabs in the document remain tabs.  If you want to convert tabs to spaces, use
  490. the ":retab" command.  Use these commands: >
  491.  
  492.     :set expandtab
  493.     :%retab
  494.  
  495. Now Vim will have changed all indents to use spaces instead of tabs.  However,
  496. all tabs that come after a non-blank character are kept.  If you want these to
  497. be converted as well, add a !: >
  498.  
  499.     :%retab!
  500.  
  501. This is a little bit dangerous, because it can also change tabs inside a
  502. string.  To check if these exist, you could use this: >
  503.  
  504.     /"[^"\t]*\t[^"]*"
  505.  
  506. It's recommended not to use hard tabs inside a string.  Replace them with
  507. "\t" to avoid trouble.
  508.  
  509. The other way around works just as well: >
  510.  
  511.     :set noexpandtab
  512.     :%retab!
  513.  
  514. ==============================================================================
  515. *30.6*    Formatting comments
  516.  
  517. One of the great things about Vim is that it understands comments.  You can
  518. ask Vim to format a comment and it will do the right thing.
  519.    Suppose, for example, that you have the following comment:
  520.  
  521.     /* ~
  522.      * This is a test ~
  523.      * of the text formatting. ~
  524.      */ ~
  525.  
  526. You then ask Vim to format it by positioning the cursor at the start of the
  527. comment and type: >
  528.  
  529.     gq]/
  530.  
  531. "gq" is the operator to format text.  "]/" is the motion that takes you to the
  532. end of a comment.  The result is:
  533.  
  534.     /* ~
  535.      * This is a test of the text formatting. ~
  536.      */ ~
  537.  
  538. Notice that Vim properly handled the beginning of each line.
  539.   An alternative is to select the text that is to be formatted in Visual mode
  540. and type "gq".
  541.  
  542. To add a new line to the comment, position the cursor on the middle line and
  543. press "o".  The result looks like this:
  544.  
  545.     /* ~
  546.      * This is a test of the text formatting. ~
  547.      * ~
  548.      */ ~
  549.  
  550. Vim has automatically inserted a star and a space for you.  Now you can type
  551. the comment text.  When it gets longer than 'textwidth', Vim will break the
  552. line.  Again, the star is inserted automatically:
  553.  
  554.     /* ~
  555.      * This is a test of the text formatting. ~
  556.      * Typing a lot of text here will make Vim ~
  557.      * break ~
  558.      */ ~
  559.  
  560. For this to work some flags must be present in 'formatoptions':
  561.  
  562.     r    insert the star when typing <Enter> in Insert mode
  563.     o    insert the star when using "o" or "O" in Normal mode
  564.     c    break comment text according to 'textwidth'
  565.  
  566. See |fo-table| for more flags.
  567.  
  568.  
  569. DEFINING A COMMENT
  570.  
  571. The 'comments' option defines what a comment looks like.  Vim distinguishes
  572. between a single-line comment and a comment that has a different start, end
  573. and middle part.
  574.    Many single-line comments start with a specific character.  In C++ // is
  575. used, in Makefiles #, in Vim scripts ".  For example, to make Vim understand
  576. C++ comments: >
  577.  
  578.     :set comments=://
  579.  
  580. The colon separates the flags of an item from the text by which the comment is
  581. recognized.  The general form of an item in 'comments' is:
  582.  
  583.     {flags}:{text}
  584.  
  585. The {flags} part can be empty, as in this case.
  586.    Several of these items can be concatenated, separated by commas.  This
  587. allows recognizing different types of comments at the same time.  For example,
  588. let's edit an e-mail message.  When replying, the text that others wrote is
  589. preceded with ">" and "!" characters.  This command would work: >
  590.  
  591.     :set comments=n:>,n:!
  592.  
  593. There are two items, one for comments starting with ">" and one for comments
  594. that start with "!".  Both use the flag "n".  This means that these comments
  595. nest.  Thus a line starting with ">" may have another comment after the ">".
  596. This allows formatting a message like this:
  597.  
  598.     > ! Did you see that site? ~
  599.     > ! It looks really great. ~
  600.     > I don't like it.  The ~
  601.     > colors are terrible. ~
  602.     What is the URL of that ~
  603.     site? ~
  604.  
  605. Try setting 'textwidth' to a different value, e.g., 80, and format the text by
  606. Visually selecting it and typing "gq".  The result is:
  607.  
  608.     > ! Did you see that site? It looks really great. ~
  609.     > I don't like it.  The colors are terrible. ~
  610.     What is the URL of that site? ~
  611.  
  612. You will notice that Vim did not move text from one type of comment to
  613. another.  The "I" in the second line would have fit at the end of the first
  614. line, but since that line starts with "> !" and the second line with ">", Vim
  615. knows that this is a different kind of comment.
  616.  
  617.  
  618. A THREE PART COMMENT
  619.  
  620. A C comment starts with "/*", has "*" in the middle and "*/" at the end.  The
  621. entry in 'comments' for this looks like this: >
  622.  
  623.     :set comments=s1:/*,mb:*,ex:*/
  624.  
  625. The start is defined with "s1:/*".  The "s" indicates the start of a
  626. three-piece comment.  The colon separates the flags from the text by which the
  627. comment is recognized: "/*".  There is one flag: "1".  This tells Vim that the
  628. middle part has an offset of one space.
  629.    The middle part "mb:*" starts with "m", which indicates it is a middle
  630. part.  The "b" flag means that a blank must follow the text.  Otherwise Vim
  631. would consider text like "*pointer" also to be the middle of a comment.
  632.    The end part "ex:*/" has the "e" for indentification.  The "x" flag has a
  633. special meaning.  It means that after Vim automatically inserted a star,
  634. typing / will remove the extra space.
  635.  
  636. For more details see |format-comments|.
  637.  
  638. ==============================================================================
  639.  
  640. Next chapter: |usr_31.txt|  Exploiting the GUI
  641.  
  642. Copyright: see |manual-copyright|  vim:tw=78:ts=8:ft=help:norl:
  643.